/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.ufms.facom.chatsocket.util;

import br.ufms.facom.chatsocket.exception.*;
import java.io.*;

/**
 *
 * @author jairorodrigues
 */
public class IOHelper {
    
    /**
     * @param caminho O caminho do arquivo relativo a raiz da aplicação.
     * @return Object O objeto recuperado
     */
    public Object lerObjetoDeArquivo (String caminho) throws ArquivoNaoEncontradoException
    {
        try
        {
            caminho = formatarCaminho(caminho);
            
            ObjectInputStream in;
            FileInputStream fs;

            fs = new FileInputStream(caminho);
            in = new ObjectInputStream(fs);
            
            Object obj = in.readObject();
            
            in.close();
            fs.close();
            
            return obj;
        }
        catch (FileNotFoundException ex)
        {
            throw new ArquivoNaoEncontradoException(ex);
        }
        catch (Exception ex)
        {
            throw new ProblemaNaLeituraDoObjetoSerializadoException(ex);
        }
    }

    /**
     * @param objeto Objeto serializavel
     * @param caminho O caminho do arquivo relativo a raiz da aplicação.
     * @throws ArquivoNaoEncontradoException 
     */
    public void salvarObjetoEmArquivo (Serializable objeto, String caminho) throws ArquivoNaoEncontradoException
    {
        try
        {
            ObjectOutputStream out;
            FileOutputStream fo;
            
            caminho = formatarCaminho(caminho);
            
            fo = new FileOutputStream(caminho);
            out = new ObjectOutputStream(fo);
            
            out.writeObject(objeto);
            
            out.flush();
            out.close();
            
            fo.flush();
            fo.close();
        }   
        catch (FileNotFoundException ex)
        {
            throw new ArquivoNaoEncontradoException(ex);
        }
        catch (Exception ex)
        {
            throw new ProblemaNaGravacaoDoObjetoSerializadoException(ex);
        }
    }

    /**
     * Escreve linha no final de um arquivo.
     * @param caminhoArquivo O caminho do arquivo relativo à raiz da aplicação.
     * @param texto
     * @throws IOException 
     */
    public void escreverLinha (String caminhoArquivo, String texto) {

        try
        {
            FileWriter writer = new FileWriter(formatarCaminho(caminhoArquivo),true);
            PrintWriter saida = new PrintWriter(writer);
            saida.println(texto);
            saida.close();
            writer.close();
        }
        catch (IOException ex)
        {
            throw new ProblemaNaEscritaEmArquivoException(ex);
        }
    }
    
    /**
     * Recebe um caminho e retorna seu caminho absoluto relativo à raiz da aplicação
     */
    private String formatarCaminho (String caminho) {
        return System.getProperty("user.dir") + File.separator + caminho;
    }
    
}
